package com.kube.design.template;

/**
 * @author q.zhangr
 * @version 1.0.0
 * @date 2020/7/16
 */
public abstract class AbstractHookAbstractClass {

    /**
     * 模板方法
     */
    public void TemplateMethod() {
        abstractMethod1();
        HookMethod1();
        if (HookMethod2()) {
            SpecificMethod();
        }
        abstractMethod2();
    }

    /**
     * 具体方法
     */
    public void SpecificMethod() {
        System.out.println("抽象类中的具体方法被调用...");
    }

    /**
     * 钩子方法1
     */
    public void HookMethod1() {
    }

    /**
     * 钩子方法2
     *
     * @return
     */
    public boolean HookMethod2() {
        return true;
    }

    /**
     * 抽象方法1
     */
    public abstract void abstractMethod1();

    /**
     * 抽象方法2
     */
    public abstract void abstractMethod2();

}
